/**
 *  Step3)权限校验：
 *  Vue Router中的 前置钩子函数 beforeEach(to, from, next)
 *  当进行路由跳转之前，进行判断是否已经成功登录，登录过则允许访问非登录页面，
 *  否则回到登录页
 * 
 *  to:  即将要进入的目标路由对象
 *  from: 即将要离开的路由对象
 *  next: 是一个方法，可以指定路由地址，进行路由跳转
 */

/* 导入路由 */
import router from './router'
/* 导入查询用户信息，注意由于不是default所以使用大括号导入 */

router.beforeEach((to, from, next) => {
    /* 1:从浏览器中获取token文件 */
    const token = localStorage.getItem('etoak_cms_token')
    /* 此处一般为admin */
    // console.log('token', token)
    /* 2:如果本地无法获取token */
    if (!token) {
        /* 2.1如果用户没有token还不老老实实登录 */
        if(to.path==='/register'){
            next()
        } else if(to.path !== '/login') {
            /* 强迫跳转到登录页面 */
            next({ path: '/login' })
        }
        else {
            /* 2.2如果用户没有token但是想直接登录，则直接跳转路由即可 */
            next()
        }
    } else {
        // 3:获取到token, 
        // 3.1获取到token并且还是想去login，那就去成全它
        if (to.path === '/login') {
            /* 强迫跳转到登录页面 */
            next({ path: '/login' })
        }else {
            // 3.2 请求路由非登录页面，先在本地查看是否有用户信息，
            const userInfo = localStorage.getItem('etoak_cms_user')
            if (userInfo) {
                // 本地获取到，则直接让它去目标路由
                next()
            } else {
                // 如果本地没有用户信息， 就通过token去获取用户信息，
                this.$dao.getUserInfo(token).then(response => {
                    const resp = response.data
                    if (resp.flag) {
                        // 如果获取到用户信息，则进行非登录页面，否则回到登录页面
                        // 保存到本地
                        localStorage.setItem('etoak_cms_user', JSON.stringify(resp.data))
                        next()
                    } else {
                        // 未获取到用户信息，重新登录 
                        next({ path: '/login' })
                    }
                })
            }
        }
    }
})